frontend/pages/e/[uuid]/alerts.tsx (view raw)
1import {PropsWithChildren} from 'react';
2import Alerts from '../../../containers/Alerts';
3import EventLayout, {TabComponent} from '../../../layouts/Event';
4import {
5 EventByUuidDocument,
6 EventEntity,
7 TripAlertDocument,
8 TripAlertEntity,
9} from '../../../generated/graphql';
10import pageUtils from '../../../lib/pageUtils';
11
12interface Props {
13 eventUUID: string;
14 announcement?: string;
15 event: EventEntity;
16 tripAlertEntity: TripAlertEntity;
17}
18
19const Page = (props: PropsWithChildren<Props>) => {
20 return (
21 <EventLayout
22 {...props}
23 Tab={AlertsTab}
24 tabProps={{tripAlertEntity: props.tripAlertEntity}}
25 />
26 );
27};
28
29const AlertsTab: TabComponent<Props> = ({
30 event,
31 tripAlertEntity,
32}: {
33 event: EventEntity;
34 tripAlertEntity: TripAlertEntity;
35}) => {
36 return <Alerts event={event} tripAlertEntity={tripAlertEntity} />;
37};
38
39export const getServerSideProps = pageUtils.getServerSideProps(
40 async (context, apolloClient) => {
41 const {uuid} = context.query;
42 const {host = ''} = context.req.headers;
43 let event = null;
44 let tripAlertEntity = null;
45
46 try {
47 const {data} = await apolloClient.query({
48 query: EventByUuidDocument,
49 variables: {uuid},
50 });
51 event = data?.eventByUUID?.data;
52 } catch (error) {
53 return {
54 notFound: true,
55 };
56 }
57
58 try {
59 const {data} = await apolloClient.query({
60 query: TripAlertDocument,
61 variables: {eventId: event.id},
62 });
63 tripAlertEntity = data.eventTripAlert.data;
64 } catch (error) {
65 tripAlertEntity = null;
66 }
67
68 return {
69 props: {
70 eventUUID: uuid,
71 tripAlertEntity,
72 metas: {
73 title: event?.attributes?.name || '',
74 url: `https://${host}${context.resolvedUrl}`,
75 },
76 },
77 };
78 }
79);
80
81export default Page;